5 kyu
函數接受一個字串並傳回使用 Rot13 加密的字串;但如果字串中包含數字或特殊字符,則直接返回。
Rot13 將英文拆分成 13 個字母為一列的組合,一列以 A 為首、一列以 N 為首,並且兩個組合倆倆相對;也就是說經過加密之後,A 應該會被替換成另一列的對應位置:N。
其他依此類推,並且區分大小寫。
利用 charCodeAt 方法驗證後,兩個組合 Unicode 編碼差異為 13。
因此針對英文字母的 Unicode,返回對應編碼的字串即可。
function rot13(message) {
return message.replace(/[A-Za-z]/g, (match) => {
const code = match.charCodeAt(0);
if ((code > 77 && code <= 90) || code >= 110) {
return String.fromCharCode(code - 13);
}
return String.fromCharCode(code + 13);
});
}
使用字串取代方法 replace,查找字串中的所有大小寫英文字母字元。
code 獲取該字元的 Unicode 編碼,> 77 && code <= 90
判斷是否為大寫英文字母 N 開始的字;>= 110
判斷是否為小寫英文字母 n 開始的字。
大寫字母 "A" Unicode 十進位:65。
小寫字母 "a" Unicode 十進位:97。
大寫字母 "N" Unicode 十進位:78。
小寫字母 "n" Unicode 十進位:110。
因此利用這個數值範圍,再用 fromCharCode 取得 Unicode 編碼回傳的數字即可。
開始解程式之後才發現,僅僅只是一題的題目,也可以有眾多的類別。
可以考數學、考函數式程式設計、甚至可以考 IP 轉換、密碼學⋯⋯等等。
以前總是不懂為什麼很多技術文章,常常看到用說故事的方式去寫?
仔細想想,其實不是說背景故事,而是在「交代規則」才對。